package com.chushouya.product.service.admin;

import com.general.framework.core.schema.PageResult;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemValueDetailDTO;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemValueListDTO;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemValueQuery;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemValueSaveDTO;
import com.chushouya.product.dto.admin.tempevaluate.TempEvaluateItemValueUpdateDTO;
import com.chushouya.product.dto.admin.product.evaluate.TempEvaluateItemAddSingleDTO;
import com.chushouya.product.dto.admin.product.evaluate.TempEvaluateItemValueEditDTO;
import com.chushouya.product.dto.admin.product.evaluate.TempItemDTO;

import java.util.List;

/**
 * 模板估价项目选项业务
 */
public interface TempEvaluateItemValueService {

    /**
     * 分页查询模板估价项目选项
     * @param query 参数
     * @return 分页对象
     */
    PageResult<TempEvaluateItemValueListDTO> selectTempEvaluateItemValuePageResult(TempEvaluateItemValueQuery query);

    /**
     * 查询模板估价项目选项列表
     * @param query 参数
     * @return 列表
     */
    List<TempEvaluateItemValueListDTO> selectTempEvaluateItemValueList(TempEvaluateItemValueQuery query);

    /**
     * 根据ID查询模板估价项目选项
     * @param tempItemValueId 模板估价项目选项ID
     * @return 模板估价项目选项详情
     */
    TempEvaluateItemValueDetailDTO getTempEvaluateItemValueDetail(Long tempItemValueId);

    /**
     * 新增模板估价项目选项
     * @param tempEvaluateItemValue 模板估价项目选项
     * @return ID
     */
    Long addTempEvaluateItemValue(TempEvaluateItemValueSaveDTO tempEvaluateItemValue);

    /**
     * 修改模板估价项目选项
     * @param tempEvaluateItemValue 模板估价项目选项
     * @return ID
     */
    Long editTempEvaluateItemValue(TempEvaluateItemValueUpdateDTO tempEvaluateItemValue);

    /**
     * 删除模板估价项目选项
     * @param tempItemValueId 模板估价项目选项ID
     */
    void removeTempEvaluateItemValue(Long tempItemValueId);

    /**
     * 根据模板估价项目ID查询选项列表
     * @param tempItemId 模板估价项目ID
     * @return 列表
     */
    List<TempEvaluateItemValueListDTO> selectTempEvaluateItemValueListByTempItemId(Long tempItemId);

    /**
     * 根据估价项目选项ID查询模板估价项目选项列表
     * @param valueId 估价项目选项ID
     * @return 列表
     */
    List<TempEvaluateItemValueListDTO> selectTempEvaluateItemValueListByValueId(Long valueId);

    /**
     * 根据模板ID获取模板估价项目组合列表
     * @param tempId 模板ID
     * @return 模板估价项目组合列表
     */
    List<TempItemDTO> getTempItemsByTempId(Long tempId);

    /**
     * 修改模板估价项目选项价格
     * @param editDTO 编辑参数
     * @return 是否成功
     */
    Boolean updateTempEvaluateItemValuePrice(TempEvaluateItemValueEditDTO editDTO);

    /**
     * 根据tempItemId删除整个模板估价项目
     * @param tempItemId 模板估价项目ID
     * @param tempId 模板ID
     * @return 是否成功
     */
    Boolean deleteTempEvaluateItemByTempItemId(Long tempItemId, Long tempId);

    /**
     * 根据tempItemValueId删除对应的模板估价记录
     * @param tempItemValueId 模板估价项目选项ID
     * @return 是否成功
     */
    Boolean deleteTempEvaluateItemValueById(Long tempItemValueId);

    /**
     * 根据估价项目选项ID添加单个模板估价项目
     * @param addSingleDTO 添加参数
     * @return 是否成功
     */
    Boolean addTempEvaluateItemSingle(TempEvaluateItemAddSingleDTO addSingleDTO);
}
